import numpy as np

def level_to_rain(level: int) -> float:
    """
    级别转换为雨量(0=0.0, 1=5.0, 2=17.0, 3=39.0, 4=75.0)
    """
    rain = 0.0
    if (level == 0):
        rain = 0.0
    if (level == 1):
        rain = 5.0
    if (level == 2):
        rain = 17.0
    if (level == 3):
        rain = 39.0
    if (level == 4):
        rain = 75.0
    return float(rain)


def rain_to_level(rain: float) -> int:
    """
    雨量转换为级别(0,1,2,3,4)
    """
    level = 0
    if (rain < 0.1):
        level = 0
    if (rain >= 0.1 and rain < 10):
        level = 1
    if (rain >= 10 and rain < 25):
        level = 2
    if (rain >= 25 and rain < 50):
        level = 3
    if (rain >= 50 and rain < 999):
        level = 4
    return level




# | 数据类型 | 内置码 | 意义 |
# | ---     | --- | --- |
# | int8    | i1  | 字节（-128 to 127）  |
# | int16   | i2  | 整数,16位字节        |
# | int32   | i4  | 整数,32位字节        |
# | int64   | i8  | 整数,64位字节        |
# | float16 | f2  | 浮点型，16位字节     |
# | float32 | f4  | 浮点型，32位字节     |
# | float64 | f8  | 浮点型，64位字节     |
# | bool_   | b   | 布尔类型             |
# | Unicode | U   | Unicode编码          |
# | String  | S   | 字符串               |

#
# Python numpy之结构化数据类型
#
# 以Python 字典 key-value 形式定义每个字段参数类型
#
"""
# [1] 元组列表形式
# 在结构化数据类型创建可以使用元组形式进行定义
#   每一个元组表示一个字段的，形式如(name,datatype,shape)
#   元组中的shape 字段是可选字段
#   datatype可以定义为任何类型
"""
x11 = np.dtype([("address", "S5"), ("family", "U10", (2, 2))])
# dtype([('address', 'S5'), ('family', '<U10', (2, 2))])

"""
# [2] 逗号分隔
# 在numpy 库中可以支持带逗号分隔基本格式字符串来定义dtype
#   逗号分隔基本格式字符串形式如: “i7,f4,U10”
#   字段中name系统自动生成如: f0,f1等形式
#   字段中的偏离量系统自动确认
"""
x21 = np.dtype("i8,S4,f4")
# dtype([('f0', '<i8'), ('f1', 'S4'), ('f2', '<f4')])
x22 = np.dtype("i8,S4,(5,3)f4")
# dtype([('f0', '<i8'), ('f1', 'S4'), ('f2', '<f4', (5, 3))])

"""
# [3] 以字典形式表示各参数
# 字典形式定义字段形式如：{“name”: [], “formats”: [], “offsetd”: [], “itemsize”: }
#   name:       长度相同的字段名称列表
#   formats:    dtype, 基本格式列表
#   offsets:    偏移量列表，可选字段。
#   itemsize:   描述dtype总大小,可选字段
# 字典形式表示字段内容, 可以允许控制字段偏离量和itemsize大小
"""
x31 = np.dtype({"names": ["name", "age"], "formats": ["S6", "i4"]})
# dtype([('name', 'S6'), ('age', '<i4')])

x32 = np.dtype({"names": ["name", "age"],
                "formats": ["S6", "i4"],
                "offsets": [0, 1],
                "itemsize": 12})

"""
# [4] 以字典形式表示字段名称
# 此方法是以字典的key 值表示字段名 name, value 值以元组形式表示指定类型和偏离量。
# 该方法官方不建议使用该方法创建
"""
x41 = np.dtype({"name": ("S6", 0), "age": ("i8", 1)})
# dtype({'names': ['name', 'age'], 'formats': ['S6', '<i8'], 'offsets': [0, 1], 'itemsize': 9})


# 选用[1]元组列表形式 (name,datatype,shape)
STATION: np.dtype = np.dtype([
    ("Id", "S7"),
    ("Lon", "f2"),
    ("Lat", "f2"),
    ("Alt", "f2"),
    ("Value", "f2"),
])
